#include "compile_run.hpp"
//两种方案，一种将httplib.h 拷贝过来， 一种是ln -s
#include "../comm/httplib.h"

using namespace ns_compile_and_run;
using namespace httplib;

void Usage(std::string proc)
{
    std::cerr << "Usage: " << "\n\t" << proc << " port" << std::endl;
}

//编译服务随时可能被多个人请求，必须保证传递上来的code， 形成源文件名称的时候
//要具有唯一性，要不然多个用户之间会互相影响

// ./complie_server port
int main(int argc, char* argv[])
{
    if(argc != 2)
    {
        Usage(argv[0]);
        return 1;
    }

    //提供的编译服务, 打包形成一个网路服务
    //cpp-httplib
    Server svr;
    svr.Get("/hello", [](const Request &req, Response &resp)   
            { resp.set_content("hello httplib! 你好啊", "text/plain;charset=utf-8");
    });// 测试

    svr.Post("/compile_and_run", [](const Request &req, Response &resp) {
        //用户请求的服务正文是我们想要的json_string
        std::string in_json = req.body;
        std::string out_json;
        if (!in_json.empty())
        {
            CompileAndRun::Start(in_json, &out_json);
            resp.set_content(out_json, "application/json;charset=utf-8");
        }
    });

    svr.listen("0.0.0.0", atoi(argv[1])); // 启动http服务

    // //测试:

    // //通过http 让client给我们上传一个json string
    // //充当客户端
    // std::string in_json;

    // Json::Value in_value;
    // // R"()", raw string  保留字符串原貌
    // in_value["code"] = R"(#include <iostream>
    // int main()
    // {
    //     std::cout << "你好呀！" << std::endl;
    //     int a = 10;
    //     a /= 0;
    //     return 0;
    // })";
    // in_value["input"] = "";
    // in_value["cpu_limit"] = 1;
    // in_value["mem_limit"] = 10240 * 3;

    // Json::FastWriter write;
    // in_json = write.write(in_value);

    // std::cout << in_json << std::endl;

    // //这个是将来给客户端返回的json串
    // std::string out_json;
    // CompileAndRun::Start(in_json, &out_json);

    // std::cout << out_json << std::endl;
    // return 0;
}